home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / listings / v_12_07 / allison / destroy7.cpp < prev   
C/C++ Source or Header  |  1994-05-02  |  758b  |  56 lines

  1. LISTING 11 - Throws an exception in a constructor
  2.  
  3. // destroy7.cpp
  4. #include <stdio.h>
  5.  
  6. class Open_err
  7. {};
  8.  
  9. class File
  10. {
  11.     FILE *f;
  12. public:
  13.     File(const char* fname, const char* mode)
  14.     {
  15.         f = fopen(fname, mode);
  16.         if (f == NULL)
  17.             throw Open_err();
  18.     }
  19.     ~File()
  20.     {
  21.         fclose(f);
  22.         puts("File closed");
  23.     }
  24. };
  25.  
  26. void f(char *fname);
  27.  
  28. main()
  29. {
  30.     try
  31.     {
  32.         f("file1.dat");
  33.     }
  34.     catch(Open_err)
  35.     {
  36.         puts("File open error");
  37.     }
  38.     catch(...)
  39.     {
  40.         puts("Exception caught in main()");
  41.     }
  42.     return 0;
  43. }
  44.  
  45. void f(char *fname)
  46. {
  47.     File x(fname,"r");
  48.     throw 1;
  49. }
  50.  
  51. /* Output:
  52. File closed
  53. Exception caught in main()
  54. */
  55.  
  56.